# 导入 Leap Motion 和 OpenCV 库
import Leap, cv2
# 导入自定义支持函数
from supportFunctions import *
# 导入 sleep 函数
from time import sleep
# 导入 NumPy 库
import numpy as np

# 创建 Leap Motion 控制器对象
controller = Leap.Controller()
# 允许访问原始图像数据
controller.set_policy(Leap.Controller.POLICY_IMAGES)

# 等待一段时间，确保 Leap Motion 控制器已准备好
sleep(0.1)

# 循环处理图像
for i in range(100):
    # 获取 Leap Motion 控制器的当前帧
    frame = controller.frame()
    # 获取左摄像头的图像
    image = frame.images[0]

    # 遍历当前帧中的手
    for hand in frame.hands:
        # 对于左手相机:
        # 计算手指在图像上的水平和垂直斜率
        horizontal_slope = -1 * (hand.fingers[1].tip_position.x + 20) / hand.fingers[1].tip_position.y
        vertical_slope = hand.fingers[1].tip_position.z / hand.fingers[1].tip_position.y

        # 计算手指射线在图像上的位置
        ray = [horizontal_slope * image.ray_scale_x + image.ray_offset_x, \
               vertical_slope * image.ray_scale_y + image.ray_offset_y]

        pixel = [ray[0] * 400, ray[1] * 400]

        # 打印手指的三维位置信息
        print('x-position: ' + str(frame.hands[0].fingers[1].tip_position.x))
        print('y-position: ' + str(frame.hands[0].fingers[1].tip_position.y))
        print('z-position: ' + str(frame.hands[0].fingers[1].tip_position.z))

        # 打印手指斜率信息
        print('Horizontal Slope: ' + str(horizontal_slope))
        print('Vertical Slope: ' + str(vertical_slope))

        # 打印手指在图像上的像素位置
        print('Pixel Location x: ' + str(pixel[0]))
        print('Pixel Location y: ' + str(pixel[1]))

    # 等待一秒钟
    sleep(1)